#ifndef LINKEDLIST_H
#define LINKEDLIST_H

// 通用链表节点结构体
typedef struct Node {
    void* data;          // 数据指针，可以指向任意类型
    struct Node* next;   // 下一节点指针
} Node;

// 链表结构体
typedef struct {
    Node* head;          // 头节点指针
    int size;           // 链表大小
    int dataSize;       // 数据类型大小（字节数）
} LinkedList;

// 链表操作函数
void list_init(LinkedList* list, int dataSize);              // 初始化链表
void list_clear(LinkedList* list);                           // 清空链表
void list_destroy(LinkedList* list);                         // 销毁链表
int list_size(LinkedList* list);                            // 获取链表大小
int list_is_empty(LinkedList* list);                        // 判断链表是否为空

// 数据操作函数
void list_push_front(LinkedList* list, void* data);         // 头部插入
void list_push_back(LinkedList* list, void* data);          // 尾部插入
void list_insert(LinkedList* list, int index, void* data);  // 指定位置插入
void list_remove_front(LinkedList* list);                   // 头部删除
void list_remove_back(LinkedList* list);                    // 尾部删除
void list_remove(LinkedList* list, int index);              // 指定位置删除
void* list_get(LinkedList* list, int index);               // 获取指定位置数据
void list_set(LinkedList* list, int index, void* data);    // 设置指定位置数据

// 遍历函数
void list_foreach(LinkedList* list, void (*func)(void*));   // 遍历链表

#endif 